#!/sbin/openrc-run
# Copyright 1999-2008 Gentoo Foundation
# Author Geaaru
# Distributed under the terms of the GNU General Public License v2

opts="zap"

depend() {
	use lo
}

checkconfig() {
	ebegin "Checking hylafax server configuration"

	if [ x$spooldir == x ] ; then
		eerror "No spooldir directory defined"
		return 1
	else
		SPOOL=$spooldir
		einfo "Use spool directory $SPOOL"
	fi

	if [ x$mode == x ] ; then
		eerror "No mode defined"
		return 1
	fi

	if [ ! -f $SPOOL/etc/setup.cache ] ; then
		eerror "No $SPOOL/etc/setup.cache file founded. Use faxsetup command"
		return 1
	fi

	if [[ x$hfaxd == x || ! -f $hfaxd ]] ; then
		eerror "No hfaxd daemon founded"
		return 1
	fi

	if [[ x$faxq == x || ! -f $faxq ]] ; then
		eerror "No faxq program founded"
		return 1
	fi

	if [[ x$faxgetty == x || ! -f $faxgetty ]] ; then
		eerror "No faxgetty program founded"
		return 1
	fi

	if [ x$faxbind == x ] ; then
		eerror "No binding address supply"
		return 1
	fi

	if [ x$piddir == x ] ; then
		PIDDIR=$SPOOL
	else
		PIDDIR=$piddir
	fi


	hfaxd_args="-l $faxbind -q $SPOOL"

	case $mode in
		newproto)
			if [[ x$faxport == x ]] ; then
				eerror "No faxport defined"
				return 1
			fi
			hfaxd_args="$hfaxd_args -i $faxport"
			;;
		oldproto)
			if [[ x$oldprotoport == x ]] ; then
				eerror "No oldprotoport defined"
				return 1
			fi
			hfaxd_args="$hfaxd_args -o $oldprotoport"
			;;
		snpp)
			if [[ x$snppport == x ]] ; then
				eerror "No snppport defined"
				return 1
			fi
			hfaxd_args="$hfaxd_args -s $snppport"
			;;
		any)
			if [[ x$faxport == x || x$snppport == x || x$oldprotoport == x ]] ; then
				eerror "No port data founded for old services"
				return 1
			fi
			hfaxd_args="$hfaxd_args -i $faxport -s $snppport -o $oldprotoport"
			;;
		*)
			eerror "Invalid mode"
			return 1
			;;

	esac

	faxq_args="-q $SPOOL"

	# workaround for manage save of pidfile with start-stop-daemon
	hfaxd_args="$hfaxd_args -d"
	faxq_args="$faxq_args -D"
		
	return 0
}

start() {
	local result

	checkconfig || return 1

	ebegin "Starting HylaFAX server daemons"

	start_faxq
	result=$?

	if [ $result -ne 0 ]  ; then
		eerror "Error on start $faxq daemon"
		return 1
	fi

	start_hfaxd
	result=$?

	eend $result
}

start_hfaxd() {
	local arguments="--start \
			 --make-pidfile --pidfile $PIDDIR/hfaxd.pid"
	
	einfo "Starting $hfaxd with args $hfaxd_args"

	start-stop-daemon -b ${arguments} --exec $hfaxd -- $hfaxd_args > /dev/null 2>&1

	return $?;
}

start_faxq() {
	local arguments="--start \
			 --make-pidfile --pidfile $PIDDIR/faxq.pid"
	einfo "Starting $faxq ... "

	start-stop-daemon -b ${arguments} --exec $faxq -- $faxq_args > /dev/null 2>&1
	
	return $?
}

stop() {
	checkconfig || return 1

	ebegin "Stopping HylaFAX server daemons"
	
	start-stop-daemon --stop --quiet --pidfile $PIDDIR/hfaxd.pid
	start-stop-daemon --stop --quiet --pidfile $PIDDIR/faxq.pid
	eend $?
}

zap() {
	checkconfig || return 1

	ebegin "Zap HylaFAX server daemon files"

	if [ -f $PIDFILE/hfaxd.pid ] ; then
		rm -f $PIDFILE/hfaxd.pid
	fi

	if [ -f $PIDFILE/faxq.pid ] ; then
		rm -f $PIDFILE/faxq.pid
	fi
}

restart() {
	stop
	start
}
